iT邦幫忙

2026 iThome 鐵人賽

DAY 2
0
AI Engineering

拒絕通靈測試與 AI 垃圾:SDET 的 30 天自動化防禦工事系列 第 2

遇到 Error 就裝死?AI 最愛的 except Exception: pass

  • 分享至 

  • xImage
  •  

「你看,測試都 passed 欸」

在工業工程(IE)與豐田生產方式(TPS)中,有一個極度核心的原則叫做「自働化(Jidoka)」——只要機器一偵測到異常,就要立刻「拉燈停線(Andon)」。停線看起來很浪費時間,但這是避免產出大量不良品的唯一方法。

但 AI 寫 Code 的邏輯完全相反。AI 的目標是「讓這段 Code 看起來會動,而且不會噴紅字」。當它遇到不確定的邊界條件,或者不知道怎麼處理的外部依賴時,它最喜歡做的事情就是「吞掉錯誤(Swallowing Exceptions)」。

發生了連線 Timeout?吞掉。發生了 Null Pointer?吞掉。最後的結果就是,使用者的訂單沒有結帳成功,但系統回傳 200 OK。這種「外表看似正常,內部已經爛掉」的狀態,在工廠裡叫做「隱性瑕疵」,是所有品管人員最害怕的惡夢。

來看看 AI 最愛寫的垃圾錯誤處理吧

def process_payment(order_id):
    try:
        # 為了 pass 隨便亂寫一通
        gateway.charge(order_id)
        db.update_status(order_id, "PAID")
    except Exception as e:
        #捕捉所有錯誤,然後裝死
        print(f"Something went wrong: {e}")
        pass

光靠 Code Review 去抓這種 except Exception 太慢了,人眼總有漏看的時候。我們直接在靜態分析工具 Ruff 裡面,把「禁止盲目捕捉例外(Blind Except)」的規則打開

# pyproject.toml
[tool.ruff]
# BLE001: 嚴格禁止 catch Exception 卻不 re-raise 的行為
# RET505: 強制 return 提早結束,避免巢狀地獄
select = ["E", "F", "BLE", "RET"]

[tool.ruff.flake8-blind-except]
# 不准吃掉任何非預期的系統層級 Error
strict = true

上一篇
全世界都在吹 AI Coding,誰來測這坨 AI 吐出來的髒東西?
下一篇
AI 通靈大師發功?隨便捏造套件跟 API,你還真敢 pip install 下去
系列文
拒絕通靈測試與 AI 垃圾:SDET 的 30 天自動化防禦工事9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言